home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / crtc6845.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  3KB  |  167 lines

  1. /**********************************************************************
  2.  
  3.         Motorola 6845 CRT Controller interface and emulation
  4.  
  5.         This function emulates the functionality of a single
  6.         crtc6845.
  7.  
  8.         This is just a storage shell for crtc6845 variables due
  9.         to the fact that the hardware implementation makes a big
  10.         difference and that is done by the specific vidhrdw code.
  11.  
  12. **********************************************************************/
  13.  
  14. #define CRTC6845_C
  15.  
  16. #include "driver.h"
  17. #include "crtc6845.h"
  18.  
  19.  
  20. extern int spiders_page_flip;
  21.  
  22. READ_HANDLER( crtc6845_register_r )
  23. {
  24.     int retval=0;
  25.  
  26.     switch(crtc6845_address_latch)
  27.     {
  28.         case 0:
  29.             retval=crtc6845_horiz_total;
  30.             break;
  31.         case 1:
  32.             retval=crtc6845_horiz_disp;
  33.             break;
  34.         case 2:
  35.             retval=crtc6845_horiz_sync_pos;
  36.             break;
  37.         case 3:
  38.             retval=crtc6845_sync_width;
  39.             break;
  40.         case 4:
  41.             retval=crtc6845_vert_total;
  42.             break;
  43.         case 5:
  44.             retval=crtc6845_vert_total_adj;
  45.             break;
  46.         case 6:
  47.             retval=crtc6845_vert_disp;
  48.             break;
  49.         case 7:
  50.             retval=crtc6845_vert_sync_pos;
  51.             break;
  52.         case 8:
  53.             retval=crtc6845_intl_skew;
  54.             break;
  55.         case 9:
  56.             retval=crtc6845_max_ras_addr;
  57.             break;
  58.         case 10:
  59.             retval=crtc6845_cursor_start_ras;
  60.             break;
  61.         case 11:
  62.             retval=crtc6845_cursor_end_ras;
  63.             break;
  64.         case 12:
  65.             retval=(crtc6845_start_addr&0x3f)>>8;
  66.             break;
  67.         case 13:
  68.             retval=crtc6845_start_addr&0xff;
  69.             break;
  70.         case 14:
  71.             retval=(crtc6845_cursor&0x3f)>>8;
  72.             break;
  73.         case 15:
  74.             retval=crtc6845_cursor&0xff;
  75.             break;
  76.         case 16:
  77.             retval=(crtc6845_light_pen&0x3f)>>8;
  78.             break;
  79.         case 17:
  80.             retval=crtc6845_light_pen&0xff;
  81.             break;
  82.         default:
  83.             break;
  84.     }
  85.         return retval;
  86. }
  87.  
  88.  
  89. WRITE_HANDLER( crtc6845_address_w )
  90. {
  91.     crtc6845_address_latch=data&0x1f;
  92. }
  93.  
  94.  
  95. WRITE_HANDLER( crtc6845_register_w )
  96. {
  97.  
  98. logerror("CRT #0 PC %04x: WRITE reg 0x%02x data 0x%02x\n",cpu_get_pc(),crtc6845_address_latch,data);
  99.  
  100.     switch(crtc6845_address_latch)
  101.     {
  102.         case 0:
  103.             crtc6845_horiz_total=data;
  104.             break;
  105.         case 1:
  106.             crtc6845_horiz_disp=data;
  107.             break;
  108.         case 2:
  109.             crtc6845_horiz_sync_pos=data;
  110.             break;
  111.         case 3:
  112.             crtc6845_sync_width=data;
  113.             break;
  114.         case 4:
  115.             crtc6845_vert_total=data&0x7f;
  116.             break;
  117.         case 5:
  118.             crtc6845_vert_total_adj=data&0x1f;
  119.             break;
  120.         case 6:
  121.             crtc6845_vert_disp=data&0x7f;
  122.             break;
  123.         case 7:
  124.             crtc6845_vert_sync_pos=data&0x7f;
  125.             break;
  126.         case 8:
  127.             crtc6845_intl_skew=data;
  128.             break;
  129.         case 9:
  130.             crtc6845_max_ras_addr=data&0x1f;
  131.             break;
  132.         case 10:
  133.             crtc6845_cursor_start_ras=data&0x7f;
  134.             break;
  135.         case 11:
  136.             crtc6845_cursor_end_ras=data&0x1f;
  137.             break;
  138.         case 12:
  139.             crtc6845_start_addr&=0x00ff;
  140.             crtc6845_start_addr|=(data&0x3f)<<8;
  141.             crtc6845_page_flip=data&0x40;
  142.             break;
  143.         case 13:
  144.             crtc6845_start_addr&=0xff00;
  145.             crtc6845_start_addr|=data;
  146.             break;
  147.         case 14:
  148.             crtc6845_cursor&=0x00ff;
  149.             crtc6845_cursor|=(data&0x3f)<<8;
  150.             break;
  151.         case 15:
  152.             crtc6845_cursor&=0xff00;
  153.             crtc6845_cursor|=data;
  154.             break;
  155.         case 16:
  156.             crtc6845_light_pen&=0x00ff;
  157.             crtc6845_light_pen|=(data&0x3f)<<8;
  158.             break;
  159.         case 17:
  160.             crtc6845_light_pen&=0xff00;
  161.             crtc6845_light_pen|=data;
  162.             break;
  163.         default:
  164.             break;
  165.     }
  166. }
  167.